iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0
Modern Web

JavaScript 基礎修練系列 第 6

[Day06] JavaScript - Hoisting 提升

  • 分享至 

  • xImage
  •  

在講Hoisting之前,要先解釋一下undefinedis not defined 的差異:

undefined : 是指「已宣告未賦值」的變數或函數。

var a;
console.log(a)  //undefined

is not defined : 是指「未宣告」的意思。

console.log(b)   // ReferenceError: b is not defined 

Hoisting

而Hoisting的觀念是,不管變數、函式宣告的位置在哪裡,JavaScript在一開始載入時都會先找到所有「變數」與「函式 function」,並放入記憶體空間內。

  • 先看以下範例:

    var a = '宣告變數';
    
    function b() {
        console.log('宣告函式');
    }
    
    console.log(a);   //宣告變數
    b();    //宣告函式
    
    

    以上a、b都是預期中的結果。

  • 那如果按照Hoisting的特性,下面的程式執行的結果會是什麼呢?

    console.log(a);   
    b();   
    
    var a = '宣告變數';
    
    function b() {
        console.log('宣告函式');
    }
    

    結果:

    console.log(a);    //undefined
    b();    //宣告函式
    

  • 函式b有成功執行出'宣告函式' ; 而變數a的執行結果卻是"undefined",為什麼呢?
    這是因為Hoisting的重要特性: 變數僅提升宣告的部分,而不會提升賦值
     

    也就是說,函式在宣告時就會完整放在記憶體空間裡,而變數就只是宣告但不會賦值。


上一篇
[Day05] JavaScript - 資料型別
下一篇
[Day07] JavaScript - 迴圈_part 1
系列文
JavaScript 基礎修練30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言